package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.YYFMenuManagerDao;
import com.itheima.dao.RoleDao;
import com.itheima.dao.UserDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;


@Service(interfaceClass = YYFMenuManagerService.class)
@Transactional
public class YYFMenuManagerServiceImpl implements YYFMenuManagerService {
    @Autowired
    private YYFMenuManagerDao YYFMenuManagerDao;
    @Autowired
    private UserDao userDao;
    @Autowired
    private RoleDao roleDao;

    //分页
    @Override
    public PageResult findPage(QueryPageBean queryPageBean,String username) {

        //通过用户名获得用户
        com.itheima.pojo.User user = userDao.findByUsername(username);
        //获取ID 通过调用findById方法查出用户对应的所有的角色对应的menu
        Integer id = user.getId();

        Integer currentPage = queryPageBean.getCurrentPage();
        Integer pageSize = queryPageBean.getPageSize();
        PageHelper.startPage(currentPage,pageSize);
    //通过子查询查出所有的用户的所有角色的所有菜单项
        Page<Menu> page = YYFMenuManagerDao.findMenusById(id);
        return new PageResult(page.getTotal(),page.getResult());
    }
    //编辑菜单
    @Override
    public void edit(Menu menu) {
        YYFMenuManagerDao.edit(menu);
    }
    //删除当前用户的菜单项
    //如果是删除parentMenuId为0的  那么是删除一个一级菜单 需要删除他对应的二级菜单
    //如果是删除二级菜单,可以直接删除
    @Override
    public void delete(Integer id,Integer parentMenuId) {
        if (0 ==parentMenuId){
            //该菜单是一级菜单,需删除对应的二级菜单
            YYFMenuManagerDao.delete(id);//删除选中菜单
            YYFMenuManagerDao.deleteSon(id); //通过parentMenuId=id查询到子菜单,再在中间表中删除包含子菜单的内容
        }else{
            //该菜单不是一级菜单,直接删除即可
            YYFMenuManagerDao.delete(id);
        }
    }

    //编辑框里回显数据
    @Override
    public Menu findById(Integer id) {
       return YYFMenuManagerDao.findById(id);
    }
}
